import { IPSModelObject } from '../../ipsmodel-object';
import { IPSDEField } from '../defield/ipsdefield';
import { IPSDERBase } from '../der/ipsderbase';
import { IPSDEServiceAPI } from './ipsdeservice-api';
import { IPSDEServiceAPIMethod } from './ipsdeservice-apimethod';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSDEServiceAPIRS
 */
export interface IPSDEServiceAPIRS extends IPSModelObject {
  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 代码名称2
   * @type {string}
   */
  codeName2: string;

  /**
   * 主接口对象
   *
   * @type {IPSDEServiceAPI}
   */
  getMajorPSDEServiceAPI(): IPSDEServiceAPI | null;

  /**
   * 主接口对象
   *
   * @type {IPSDEServiceAPI}
   */
  get majorPSDEServiceAPI(): IPSDEServiceAPI | null;

  /**
   * 主接口对象（必须存在）
   *
   * @type {IPSDEServiceAPI}
   */
  getMajorPSDEServiceAPIMust(): IPSDEServiceAPI;

  /**
   * 从接口对象
   *
   * @type {IPSDEServiceAPI}
   */
  getMinorPSDEServiceAPI(): IPSDEServiceAPI | null;

  /**
   * 从接口对象
   *
   * @type {IPSDEServiceAPI}
   */
  get minorPSDEServiceAPI(): IPSDEServiceAPI | null;

  /**
   * 从接口对象（必须存在）
   *
   * @type {IPSDEServiceAPI}
   */
  getMinorPSDEServiceAPIMust(): IPSDEServiceAPI;

  /**
   * 排序值
   * @type {number}
   * @default 99999
   */
  orderValue: number;

  /**
   * 关系对象
   *
   * @type {IPSDERBase}
   */
  getPSDER(): IPSDERBase | null;

  /**
   * 关系对象
   *
   * @type {IPSDERBase}
   */
  get psDER(): IPSDERBase | null;

  /**
   * 关系对象（必须存在）
   *
   * @type {IPSDERBase}
   */
  getPSDERMust(): IPSDERBase;

  /**
   * 接口方法集合
   *
   * @type {IPSDEServiceAPIMethod[]}
   */
  getPSDEServiceAPIMethods(): IPSDEServiceAPIMethod[] | null;

  /**
   * 接口方法集合
   *
   * @type {IPSDEServiceAPIMethod[]}
   */
  get psDEServiceAPIMethods(): IPSDEServiceAPIMethod[] | null;

  findPSDEServiceAPIMethod(objKey: any): IPSDEServiceAPIMethod | null;

  /**
   * 关系项
   * @type {string}
   */
  parentFilter: string;

  /**
   * 父数据标识实体属性
   *
   * @type {IPSDEField}
   */
  getParentIdPSDEField(): IPSDEField | null;

  /**
   * 父数据标识实体属性
   *
   * @type {IPSDEField}
   */
  get parentIdPSDEField(): IPSDEField | null;

  /**
   * 父数据标识实体属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getParentIdPSDEFieldMust(): IPSDEField;

  /**
   * 父类型过滤项
   * @type {string}
   */
  parentTypeFilter: string;

  /**
   * 父数据类型实体属性
   *
   * @type {IPSDEField}
   */
  getParentTypePSDEField(): IPSDEField | null;

  /**
   * 父数据类型实体属性
   *
   * @type {IPSDEField}
   */
  get parentTypePSDEField(): IPSDEField | null;

  /**
   * 父数据类型实体属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getParentTypePSDEFieldMust(): IPSDEField;

  /**
   * 数组模式
   * @type {boolean}
   * @default true
   */
  array: boolean;

  /**
   * 支持数据导出
   * @type {boolean}
   * @default false
   */
  enableDataExport: boolean;

  /**
   * 支持数据导入
   * @type {boolean}
   * @default false
   */
  enableDataImport: boolean;
}
